home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’97 / Animated Icons / Source / LogInterface.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-03  |  3.5 KB  |  123 lines  |  [TEXT/MPS ]

  1. #ifndef __LOGINTERFACE__
  2. #define __LOGINTERFACE__ 1
  3.  
  4. #include <Types.h>
  5. #include <MixedMode.h>
  6. #include <Processes.h>
  7. #include <stdarg.h>
  8.  
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12.  
  13. typedef pascal long (*LoggerCallbackProcPtr)( void* logInfoPtr, long message, long p1, long p2, long p3 );
  14.  
  15. enum {
  16.     uppLoggerDefProcInfo = kPascalStackBased
  17.          | RESULT_SIZE(SIZE_CODE(sizeof(long)))
  18.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void*)))
  19.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))
  20.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))
  21.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
  22.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long)))
  23. };
  24.  
  25. #if USESROUTINEDESCRIPTORS
  26. typedef UniversalProcPtr LoggerDefUPP;
  27.  
  28. #define CallLoggerCallbackProc(userRoutine, logInfoPtr, message, p1, p2, p3 )        \
  29.         CallUniversalProc((UniversalProcPtr) (userRoutine), uppLoggerDefProcInfo, logInfoPtr, message, (p1), (p2), (p3) )
  30. #define NewLoggerCallbackProc(userRoutine)        \
  31.         (ControlDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppLoggerDefProcInfo, GetCurrentISA())
  32. #else
  33. typedef LoggerCallbackProcPtr LoggerDefUPP;
  34.  
  35. #define CallLoggerCallbackProc(userRoutine, logInfoP, message, p1, p2, p3 )        \
  36.         (*(userRoutine))( logInfoP, message, p1, p2, p3 )
  37. #define NewLoggerCallbackProc(userRoutine)        \
  38.         (LoggerDefUPP)(userRoutine)
  39. #endif
  40.  
  41. #define    kLogInterfaceSignature    'KSDb'
  42. #define    kLogInterfaceVersion    2
  43. #define kMaxFlags 100
  44.  
  45. typedef struct
  46. {
  47.     OSType                    signature;
  48.     unsigned long            version;
  49.     
  50.     LoggerDefUPP            callbackUPP;
  51.  
  52.     Ptr                        ringBuffer;
  53.     unsigned long            inOffset;
  54.     unsigned long            outOffset;
  55.     unsigned long            ringSize;
  56.     
  57.     Boolean                    dataLost;
  58.     unsigned long            dataChanged;
  59.     
  60.     Boolean                    clearText;
  61.     
  62.     Boolean                    flags[ kMaxFlags ];
  63.     
  64.     ProcessSerialNumber        debugAppPSN;
  65.     
  66.     long                    debugAppA5;            //    Not used for PowerPC, but still in struct for alignment
  67. } LogInterfaceRec, *LogInterfacePtr;
  68.  
  69. enum LoggerMessage {
  70.     insertMsg = 0x100,
  71.     removeMsg,
  72.     getDataInRingSizeMsg,
  73.     getRingDataLostMsg,
  74.     getRingChangedCountMsg,
  75.     clearMsg,
  76.     printfRingMsg,
  77.     getFlagMsg,
  78.     setFlagMsg,
  79.     insertHexDumpMsg
  80. };
  81.  
  82. #define    INSERTINTORING(logP,data,size)    \
  83.     { \
  84.         if ( logP && logP->callbackUPP ) \
  85.             CallLoggerCallbackProc ( logP->callbackUPP, logP, insertMsg, (long) data, (long) size, (long) 0 ); \
  86.     }
  87.  
  88. #define    REMOVEFROMRING \
  89.     ( ( logP && logP->callbackUPP ) ? \
  90.             CallLoggerCallbackProc ( logP->callbackUPP, logP, insertMsg, (long) data, (long) size, (long) 0 ); \
  91.         : 0 )
  92.  
  93.  
  94. void InsertIntoRing ( LogInterfacePtr logP, const void* data, unsigned long dataSize );
  95. void InsertHexDumpIntoRing ( LogInterfacePtr logP, const void* data, unsigned long size );
  96. void PrintfRing ( LogInterfacePtr logP, const char* formatStr, ... );
  97. void vPrintfRing ( LogInterfacePtr logP, const char* formatStr, va_list* args );
  98.  
  99. unsigned long RemoveFromRing ( LogInterfacePtr logP, void* data, unsigned long dataSize );
  100.  
  101. unsigned long GetDataInRingSize ( LogInterfacePtr logP );
  102.  
  103. Boolean GetRingDataLost ( LogInterfacePtr logP );
  104. unsigned long GetRingChangedCount ( LogInterfacePtr logP );
  105.  
  106. void ClearText ( LogInterfacePtr logP );
  107.  
  108. LogInterfacePtr CreateLogInterfacePtr ( LoggerDefUPP callback );
  109. LogInterfacePtr GetLogInterfacePtr ( );
  110. void DisposeLogInterfacePtr ( );
  111.  
  112. Boolean GetFlagValue ( LogInterfacePtr logP, unsigned long whichFlag );
  113. void SetFlagValue ( LogInterfacePtr logP, unsigned long whichFlag, Boolean value );
  114.  
  115. void Debug ( char* format, ... );
  116. void DebugF ( unsigned short flag, char* format, ... );
  117.  
  118. #ifdef __cplusplus
  119. };
  120. #endif
  121.  
  122.  
  123. #endif // __LOGINTERFACE__